home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / bdftruncate < prev    next >
Text File  |  2006-04-12  |  3KB  |  78 lines

  1. #!/usr/bin/perl
  2. #
  3. # bdftruncate.pl -- Markus Kuhn <mkuhn@acm.org>
  4. #
  5. # This Perl script allows you to generate from an ISO10646-1 encoded
  6. # BDF font other ISO10646-1 BDF fonts in which all characters above
  7. # a threshold code value are stored unencoded.
  8. #
  9. # Id: bdftruncate.pl,v 1.5 2001-05-31 10:58:58+01 mgk25 Exp $
  10.  
  11. # Subroutine to identify whether the ISO 10646/Unicode character code
  12. # ucs belongs into the East Asian Wide (W) or East Asian FullWidth
  13. # (F) category as defined in Unicode Technical Report #11.
  14. sub iswide ($) {
  15.     my $ucs = shift(@_);
  16.  
  17.     return ($ucs >= 0x1100 &&
  18.             ($ucs <= 0x115f ||                   # Hangul Jamo
  19.              ($ucs >= 0x2e80 && $ucs <= 0xa4cf &&
  20.               ($ucs & ~0x0011) != 0x300a && $ucs != 0x303f) || # CJK .. Yi
  21.              ($ucs >= 0xac00 && $ucs <= 0xd7a3) || # Hangul Syllables
  22.              ($ucs >= 0xf900 && $ucs <= 0xfaff) || # CJK Comp. Ideographs
  23.              ($ucs >= 0xfe30 && $ucs <= 0xfe6f) || # CJK Comp. Forms
  24.              ($ucs >= 0xff00 && $ucs <= 0xff5f) || # Fullwidth Forms
  25.              ($ucs >= 0xffe0 && $ucs <= 0xffe6) ||
  26.              ($ucs >= 0x20000 && $ucs <= 0x2ffff)));
  27. }
  28.  
  29. # parse options
  30. if ($ARGV[0] eq '-w' || $ARGV[0] eq '+w') {
  31.     $removewide = $ARGV[0] eq '-w';
  32.     shift @ARGV;
  33. }
  34.  
  35. print STDERR <<End if $#ARGV != 0;
  36.  
  37. Usage: bdftruncate [+w|-w] threshold <source.bdf >destination.bdf
  38.  
  39. Example:
  40.  
  41.    bdftruncate 0x3200 <6x13.bdf >6x13t.bdf
  42.  
  43. will generate the file 6x13t.bdf in which all glyphs with codes
  44. >= 0x3200 will only be stored unencoded (i.e., ENCODING -1).
  45. Option -w removes East Asian Wide and East Asian FullWidth characters
  46. (default if threshold <= 0x3200), and option +w keeps them.
  47.  
  48. End
  49.  
  50. exit 1 if $#ARGV != 0;
  51.  
  52. # read threshold value from command line
  53. $threshold = $ARGV[0];
  54. if ($threshold =~ /^(0[xX]|U[+-]?)([0-9a-fA-F]+)$/) {
  55.     $threshold = hex($2);
  56. } elsif (!($threshold =~ /^[0-9]+$/)) {
  57.     die("Illegal threshold '$threshold'!\n");
  58. }
  59. $removewide = $threshold <= 0x3200 unless defined $removewide;
  60.  
  61. # filter file
  62. while (<STDIN>) {
  63.     if (/^ENCODING\s+(-?\d+)/ && 
  64.     ($1 >= $threshold || ($removewide && iswide($1)))) {
  65.     print "ENCODING -1\n";
  66.     } elsif (/^STARTFONT/) {
  67.     print;
  68.     print "COMMENT AUTOMATICALLY GENERATED FILE. DO NOT EDIT!\n";
  69.     printf("COMMENT In this version of the font file, all characters >= " .
  70.            "U+%04X are\nCOMMENT not encoded to keep XFontStruct small.\n",
  71.            $threshold);
  72.     } else {
  73.     s/^COMMENT\s+\"(.*)\"$/COMMENT $1/;
  74.         s/^COMMENT\s+\$[I]d: (.*)\$\s*$/COMMENT Derived from $1\n/;
  75.     print;
  76.     }
  77. }
  78.